package cz.vse.adventura.po1715.xskrz00_skrivankova.hra;

import static cz.vse.adventura.po1715.xskrz00_skrivankova.hra.Texty.*;
import static cz.vse.adventura.po1715.xskrz00_skrivankova.hra.Stav.*;


/*******************************************************************************
 * Instance třídy {@code PříkazPoužij} představuje příkaz
 * který použije jeden předmět na předmět druhý.
 *
 * @author    Zuzana SKŘIVÁNKOVÁ
 * @version   1.00
 */
public class PříkazPoužij extends APříkaz
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ NESOUKROMÉ METODY TŘÍDY ===========================================

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Vytvoří instanci mající na starosti reakci na příkaz <b>použij</b>,
     * po jehož zadaní se předmět zadaný v prvním parametru použije
     * na předmět zadaný v druhém parametru.
     */
    public PříkazPoužij()
    {
        super( pPOUŽIJ, //"Použij",
               "Použije předmět zadaný v prvním parametru\n" +
               "na předmět zadaný v druhém parametru." );
    }


//== ABSTRAKTNÍ METODY =========================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== OSTATNÍ NESOUKROMÉ METODY INSTANCÍ ========================================

    /***************************************************************************
     * Zkontroluje, zda je předmět uvedený v prvním parametru v batohu
     * a použije jej na předmět v parametru druhém. Předmět v parametru druhém
     * musí být dostupný v dané místnosti, kde se postava nachází a kde příkaz
     * volá.
     *
     * @param parametry Název předmětu, který se má použít následovaný
     *                      předmětem na který se má použít.
     * @return Text zpravy vypsane po porovedeni prikazu
     */
    @Override
    public String execute( String... parametry )
    {
        if (parametry.length != 2) {
            return "Příkaz potřebuje dva parametry:\n" +
                   "předmět, který má být použit a\n" +
                   "předmět, na který má být použit první předmět";
        }
        String predmet1 = parametry[0];
        String predmet2  = parametry[1];
        Batoh batoh = Hra_Alenka.getHra().getBag();
        if (! batoh.obsahuje(predmet1)) {
              return "Můžete použít pouze předmět, který máte v batohu.";
        }                                                       //==========>
        Místnost mistnost = Místnost.getAktuálníMístnost();
        Předmět predmetVMistnosti = (Předmět)Utility.najdi(predmet2,
                          mistnost.getObjects());
        
        String odpoved = "Nic to nedělá";
        
        if (predmetVMistnosti != null) {
            
            //Nakrmení ohnivého psa
            if (predmet1.toLowerCase().equals(oSTEAK.toLowerCase())) {
                if (predmetVMistnosti.getName().toLowerCase().equals(oOHNIVÝ_PES.toLowerCase())) {
                    sOHNIVY_PES_NAKRMENY = true;
                    batoh.vyjmi(oSTEAK);
                    return rOHNIVY_PES_NAKRMEN;
                }
            }
            
            //Odemknutí dveří v noře
            if (predmet1.toLowerCase().equals(oKLÍČ.toLowerCase()) && mistnost.getName().toLowerCase().equals(mNORA.toLowerCase())) {
                if (predmetVMistnosti.getName().toLowerCase().equals(oDVEŘE.toLowerCase())) {
                    sDVERE_ODEMCENY = true;
                    return rDVERE_ODEMCENY;
                }
            }
            
            //Rozbití zámku na dveřích ve vězení
            if (predmet1.toLowerCase().equals(oMEČ.toLowerCase()) && mistnost.getName().toLowerCase().equals(mVEZENI.toLowerCase())) {
                if (predmetVMistnosti.getName().toLowerCase().equals(oDVEŘE.toLowerCase())) {
                    sVEZENI_DVERE_ODEMCENY = true;
                    return rVEZENI_DVERE_ODEMCENY;
                }
            }
            
            //Zabití draka
            if (predmet1.toLowerCase().equals(oMEČ.toLowerCase())) {
                if (predmetVMistnosti.getName().toLowerCase().equals(oDRAK.toLowerCase())) {
                    sDRAK_PROBODNUT = true;
                    return rDRAK_PROBODNUT;
                }
            }

        }
        
     
        return odpoved;
    }



//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
//
//    /***************************************************************************
//     * Testovací metoda.
//     */
//    public static void test()
//    {
//        PrikazJdi x = new PrikazJdi();
//    }
//    /** @param args Parametry příkazového řádku - nepoužívané. */
//    public static void main( String[] args )  {  test();  }
}
